package com.camerax.sample

import android.content.ContentValues
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import androidx.core.app.ActivityCompat
import java.io.File
import java.text.SimpleDateFormat
import java.util.*

/**
 * date        ：2020/11/27
 * author      ：秦川小将
 * description ：常量
 */
object CameraCompat {

    // 拍照
    private const val PHOTO_PREFIX = "IMG_"
    private const val FILENAME = "yyyyMMdd_HHmmss"
    private const val PHOTO_EXTENSION = ".jpg"
    private const val MIME_TYPE = "image/jpg"

    const val TAKE_PICTURE_RESULT = "take_picture_result"

    /**
     * 使用ContentValues存储图片输出信息
     */
    fun getContentValues(): ContentValues {
        // 创建拍照后输出的图片文件名
        val fileName = "$PHOTO_PREFIX${SimpleDateFormat(FILENAME, Locale.getDefault()).format(System.currentTimeMillis())}$PHOTO_EXTENSION"
        return ContentValues().apply {
            put(MediaStore.MediaColumns.MIME_TYPE, MIME_TYPE)
            // 适配Android Q版本
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES)
                put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
            } else {
                val fileDir = File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_PICTURES).also { if (!it.exists()) it.mkdir() }
                val filePath = fileDir.absolutePath + File.separator + fileName
                put(MediaStore.Images.Media.DATA, filePath)
            }
        }
    }

    /**
     * 权限检测
     */
    fun checkSelfPermission(context: Context, permission: String) = ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED

    /**
     * 检查设备是否具有摄像头功能
     * @return 如果设备具有摄像头功能，则为true。否则为false。
     */
    private fun hasCameraFeature(context: Context) = context.applicationContext.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)
}